#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QStackedWidget>
#include "loginpage.h"
#include "registerpage.h"
#include "personalprofilepage.h"
#include "profileeditpage.h"
#include "passwordchangepage.h"
#include "friendlistpage.h"
#include "addfriendpage.h"
#include "friendrequestpage.h"
#include "frienddetailpage.h"
#include "grouplistpage.h"
#include "creategrouppage.h"
#include "joingrouppage.h"
#include "groupdetailpage.h"
#include "settingspage.h"
#include "conversationpage.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

/**
 * @brief 主窗口类，管理所有页面和整体应用逻辑
 */
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    /**
     * @brief 构造函数，初始化主窗口
     * @param parent 父窗口指针
     */
    MainWindow(QWidget *parent = nullptr);

    /**
     * @brief 析构函数，释放资源
     */
    ~MainWindow();

private slots:
    /**
     * @brief 处理登录成功事件
     * @param userId 用户ID
     * @param username 用户名
     */
    void onLoginSuccess(const QString &userId, const QString &username);

    /**
     * @brief 处理退出登录事件
     */
    void onLogout();

private:
    Ui::MainWindow *ui;                   ///< UI对象指针
    QStackedWidget *m_stackedWidget;      ///< 页面容器控件

    // 所有页面指针               
    LoginPage *m_loginPage;               ///< 登录页面
    RegisterPage *m_registerPage;         ///< 注册页面
    PersonalProfilePage *m_profilePage;   ///< 个人资料页面
    ProfileEditPage *m_profileEditPage;   ///< 资料编辑页面
    PasswordChangePage *m_pwdChangePage;  ///< 密码修改页面
    FriendListPage *m_friendListPage;     ///< 好友列表页面
    AddFriendPage *m_addFriendPage;       ///< 添加好友页面
    FriendRequestPage *m_friendReqPage;   ///< 好友申请页面
    FriendDetailPage *m_friendDetailPage; ///< 好友详情页面
    GroupListPage *m_groupListPage;       ///< 群聊列表页面
    CreateGroupPage *m_createGroupPage;   ///< 创建群聊页面
    JoinGroupPage *m_joinGroupPage;       ///< 加入群聊页面
    GroupDetailPage *m_groupDetailPage;   ///< 群聊详情页面
    SettingsPage *m_settingsPage;         ///< 设置页面
    ConversationPage *m_conversationPage; ///< 会话页面

    // 当前用户信息
    QString m_currentUserId;              ///< 当前用户ID
    QString m_currentUsername;            ///< 当前用户名

    /**
     * @brief 初始化所有页面
     */
    void initPages();

    /**
     * @brief 初始化信号槽连接
     */
    void initConnections();
};
#endif // MAINWINDOW_H
